const x_PI = 3.14159265358979324 * 3000.0 / 180.0;
/**
 * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02) 的转换
 * 即 百度 转 谷歌、高德、腾讯
 * @param bd_lng 百度地图坐标精度
 * @param bd_lat 百度地图坐标纬度
 * @returns {[lng: number, lat: number]} [精度，纬度]
 */
export function bd09togcj02(bd_lng: string | number, bd_lat: string | number): [lng: number, lat: number] {
  bd_lng = +bd_lng;
  bd_lat = +bd_lat;
  const x = bd_lng - 0.0065;
  const y = bd_lat - 0.006;
  const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
  const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
  const gg_lng = z * Math.cos(theta);
  const gg_lat = z * Math.sin(theta);
  return [gg_lng, gg_lat]
};


/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
* 即 谷歌、高德、腾讯 转 百度
* @param gcj_lng 火星坐标的经度
* @param gcj_lat 火星坐标的纬度
* @returns {[lng: number, lat: number]} [经度，纬度]
*/
export function gcj02tobd09(gcj_lng: string | number, gcj_lat: string | number): [lng: number, lat: number] {
  gcj_lat = +gcj_lat;
  gcj_lng = +gcj_lng;
  const z = Math.sqrt(gcj_lng * gcj_lng + gcj_lat * gcj_lat) + 0.00002 * Math.sin(gcj_lat * x_PI);
  const theta = Math.atan2(gcj_lat, gcj_lng) + 0.000003 * Math.cos(gcj_lng * x_PI);
  const bd_lng = z * Math.cos(theta) + 0.0065;
  const bd_lat = z * Math.sin(theta) + 0.006;
  return [bd_lng, bd_lat]
};
